Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Kalkulator błędnie wylicza deltę


Rekomendowane odpowiedzi

Opublikowano

Mam problem z kalkulatorem a mianowicie zamioną funkcji kanonicznej na iloczynową kod to taki jest

        case 3:
            std::cout << "\nPodstawowy wzor funkcji kanonicznej to = a*(x-p)(x-p)+q\n";
            std::cout << "Podstawowy wzor funkcji iloczynowej to = a*(x*x1)*(x*x2)\n";
            std::cout << "Podaj a: ";
            std::cin >> a;
            std::cout << "Podaj p: ";
            std::cin >> p;
            std::cout << "Podaj q: ";
            std::cin >> q;
            b = -p*2*a;
            c = p*p*2+q;
            double pdelta;
            pdelta = sqrt( b * b - 4 * a * c );
            sqrt( pdelta ) == pow( pdelta,( 1 / 2.0 ) );
            if (b*b-4*a*c > 0 && a != 0){
                std::cout << "\nTwoja delta wynosi = " << b*b-4*a*c << "\n";
                std::cout << "\nTwoja funkcja iloczynowa to = " << a << "*(x*" << (-b-pdelta)/(2*a) << ")*(x*" << (-b+pdelta)/(2*a) << ")\n";
                Sleep (10000);
                system( "cls" );
                goto S;
            }
            else{
                std::cout << "\nBrak funkcji iloczynowej";
                Sleep (10000);
                system( "cls" );
                goto S;
            }

I problem w tym że źle mi wylicza delte i mz a zamiana funckji kanonicznej na liniową\ogólną dobrze wylicza z kodu 

        case 2:
            std::cout << "\nPodstawowy wzor funkcji kanonicznej to = a*(x-p)(x-p)+q\n";
            std::cout << "Podstawowy wzor funkcji liniowej to = a*x*x+b*x+c\n";
            std::cout << "Podaj a: ";
            std::cin >> a;
            std::cout << "Podaj p: ";
            std::cin >> p;
            std::cout << "Podaj q: ";
            std::cin >> q;
            std::cout << "\nTwoja funkcja liniowa to = " << a << "*x*x+" << -p*2*a << "*x+" << p*p*2+q;
            Sleep (10000);
            system( "cls" );
            goto S;

Wiecie jak to naprawić ?

Opublikowano

Co to jest?

double pdelta;
pdelta = sqrt( b * b - 4 * a * c );
sqrt( pdelta ) == pow( pdelta,( 1 / 2.0 ) );

Popracuj nad czytelnością kodu.
 
Ja proponuje najpierw dokładniej zrozumieć funkcje kwadratową, bo to co się tutaj dzieje to herezja.
 
Zacznijmy od tego:

        case 2:
            std::cout << "\nPodstawowy wzor funkcji kanonicznej to = a*(x-p)(x-p)+q\n";
            std::cout << "Podstawowy wzor funkcji liniowej to = a*x*x+b*x+c\n";
            std::cout << "Podaj a: ";
            std::cin >> a;
            std::cout << "Podaj p: ";
            std::cin >> p;
            std::cout << "Podaj q: ";
            std::cin >> q;
            std::cout << "\nTwoja funkcja liniowa to = " << a << "*x*x+" << -p*2*a << "*x+" << p*p*2+q;
            Sleep (10000);
            system( "cls" );
            goto S;

Wzór funkcji kanonicznej to a * (x-p)^2 + q
Jeśli chcesz ją zamienić na wzór ogólny to:
b = -2 * p * a
c = a * p * p + q

 

No to dalej:
 

        case 3:
            std::cout << "\nPodstawowy wzor funkcji kanonicznej to = a*(x-p)(x-p)+q\n";
            std::cout << "Podstawowy wzor funkcji iloczynowej to = a*(x*x1)*(x*x2)\n";
            std::cout << "Podaj a: ";
            std::cin >> a;
            std::cout << "Podaj p: ";
            std::cin >> p;
            std::cout << "Podaj q: ";
            std::cin >> q;
            b = -p*2*a;
            c = p*p*2+q;
            double pdelta;
            pdelta = sqrt( b * b - 4 * a * c );
            sqrt( pdelta ) == pow( pdelta,( 1 / 2.0 ) );
            if (b*b-4*a*c > 0 && a != 0){
                std::cout << "\nTwoja delta wynosi = " << b*b-4*a*c << "\n";
                std::cout << "\nTwoja funkcja iloczynowa to = " << a << "*(x*" << (-b-pdelta)/(2*a) << ")*(x*" << (-b+pdelta)/(2*a) << ")\n";
                Sleep (10000);
                system( "cls" );
                goto S;
            }
            else{
                std::cout << "\nBrak funkcji iloczynowej";
                Sleep (10000);
                system( "cls" );
                goto S;
            }

Co do złych wzorów na c i b to już nie będę tłumaczył.

Zrób zmienną delta! Z założeń wynika, że a nie może być 0, więc możesz w ifie ten warunek usunąć.

sqrt( pdelta ) == pow( pdelta,( 1 / 2.0 ) );

To jest w ogóle nie zrozumiałe,

Zamiast b*b-4*a*c korzystaj ze zmiennej delty.

No i typowe gadanie, system("cls") to zły nawyk, sleep wydaje się tu bez sensu, lepiej sprawdziłby się np. std::cin. itd.

A i postać iloczynowa a(x-x1)(x-x2).

TuByłaSygnatura.png

  • 3 tygodnie później...
Opublikowano

 

A żeby nie pisać ciągle:

std::cout

Dodaj pod include:

using namespace std; 

a żeby mieć wyrobiony dobry nawyk, nie posłuchaj tego pana.

Opublikowano

@up

Tak z ciekawości, co w tym nawyku jest złego? Ja zawsze uzywam using namespace std i jeszcze niczego mi to nie uprzykrzyło :v.

jw19e8.png

  • 2 tygodnie później...
Opublikowano

A choćby dlatego :

using namespace std;

using namespace boost;

shared_ptr<int> licz(new int(10));

 

O który ci chodzi ??

w tym wypadku mozesz napisac std::shared_ptr<int> i nie bedzie problemu

jestem najlepszy

Opublikowano

 

A choćby dlatego :

using namespace std;

using namespace boost;

shared_ptr<int> licz(new int(10));

 

O który ci chodzi ??

w tym wypadku mozesz napisac std::shared_ptr<int> i nie bedzie problemu

 

 

 

Może i tak , ale w końcu w jakimś celu używasz te using namespace std;.

nostaleh.png
Opublikowano

 

 

A choćby dlatego :

using namespace std;

using namespace boost;

shared_ptr<int> licz(new int(10));

 

O który ci chodzi ??

w tym wypadku mozesz napisac std::shared_ptr<int> i nie bedzie problemu

 

 

 

Może i tak , ale w końcu w jakimś celu używasz te using namespace std;.

 

no uzywasz go zeby nie pisac przy debilstwach typu cout czy streamach, a gdy trzeba to piszesz nazwe namespace, uzyj mozgu

jestem najlepszy

Opublikowano

Jesli tak bardzo boli was dopisanie std:: do couta mozecie uzyc "using std::cout", i nie zatrudnicie przy tym calego nejmspejsa

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...